home *** CD-ROM | disk | FTP | other *** search
/ Clickx 115 / Clickx 115.iso / software / tools / windows / tails-i386-0.16.iso / live / filesystem.squashfs / usr / sbin / dpkg-reconfigure < prev    next >
Encoding:
Text File  |  2011-01-30  |  3.4 KB  |  160 lines

  1. #!/usr/bin/perl -w
  2. # This file was preprocessed, do not edit!
  3.  
  4.  
  5.  
  6. my $infodir="/var/lib/dpkg/info";
  7.  
  8. use strict;
  9. use Debconf::Db;
  10. use Debconf::Gettext;
  11. use Debconf::Template;
  12. use Debconf::Config;
  13. use Debconf::AutoSelect qw(:all);
  14. use Debconf::Log qw(:all);
  15.  
  16. Debconf::Config->priority('low');
  17.  
  18. my $unseen_only=0;
  19. my $all=0;
  20. my $force=0;
  21. my $default_priority=0;
  22. my $reload=1;
  23. Debconf::Config->getopt(
  24. gettext(qq{Usage: dpkg-reconfigure [options] packages
  25.   -a,  --all            Reconfigure all packages.
  26.   -u,  --unseen-only        Show only not yet seen questions.
  27.        --default-priority    Use default priority instead of low.
  28.        --force            Force reconfiguration of broken packages.
  29.        --no-reload        Do not reload templates. (Use with caution.)}),
  30.     "all|a"            => \$all,
  31.     "unseen-only|u"        => \$unseen_only,
  32.     "default-priority"    => \$default_priority,
  33.     "force"            => \$force,
  34.     "reload!"        => \$reload,
  35. );
  36.  
  37. if ($> != 0) {
  38.     print STDERR sprintf(gettext("%s must be run as root"), $0)."\n";
  39.     exit 1;
  40. }
  41.  
  42. Debconf::Db->load;
  43.  
  44. if ($default_priority) {
  45.     Debconf::Config->priority(Debconf::Question->get('debconf/priority')->value);
  46. }
  47.  
  48. if (lc Debconf::Config->frontend eq 'noninteractive' &&
  49.     ! Debconf::Config->frontend_forced) {
  50.     Debconf::Config->frontend('dialog');
  51. }
  52.  
  53. my $frontend=make_frontend();
  54.  
  55. unless ($unseen_only) {
  56.     Debconf::Config->reshow(1);
  57. }
  58.  
  59. my @packages;
  60. if ($all) {
  61.     @packages=allpackages();
  62.     exit unless @packages;
  63. }
  64. else {
  65.     @packages=@ARGV;
  66.     if (! @packages) {
  67.         print STDERR "$0: ".gettext("please specify a package to reconfigure")."\n";
  68.         exit 1;
  69.     }
  70. }
  71.  
  72. $ENV{DEBCONF_RECONFIGURE}=1;
  73.  
  74. foreach my $pkg (@packages) {
  75.     $frontend->default_title($pkg);
  76.     $frontend->info(undef);
  77.  
  78.     $_=`dpkg --status $pkg`;
  79.     my ($version)=m/Version: (.*)\n/;
  80.     my ($status)=m/Status: (.*)\n/;
  81.     if (! $force) {
  82.         if (! defined $status || $status =~ m/not-installed$/) {
  83.             print STDERR "$0: ".sprintf(gettext("%s is not installed"), $pkg)."\n";
  84.             exit 1;
  85.         }
  86.         if ($status !~ m/ ok installed$/) {
  87.             print STDERR "$0: ".sprintf(gettext("%s is broken or not fully installed"), $pkg)."\n";
  88.             exit 1;
  89.         }
  90.     }
  91.     
  92.     if ($reload) {
  93.         Debconf::Template->load("$infodir/$pkg.templates", $pkg)
  94.             if -e "$infodir/$pkg.templates";
  95.     }
  96.  
  97.     foreach my $info (['prerm',    'upgrade',     $version],
  98.                   ['config',   'reconfigure', $version],
  99.               ['postinst', 'configure',   $version]) {
  100.         my $script=shift @$info;
  101.         next unless -x "$infodir/$pkg.$script";
  102.  
  103.         my $is_confmodule='';
  104.  
  105.         if ($script ne 'config') {
  106.             open (IN, "<$infodir/$pkg.$script");
  107.             while (<IN>) {
  108.                 if (/confmodule/i) {
  109.                     $is_confmodule=1;
  110.                     last;
  111.                 }
  112.             }
  113.             close IN;
  114.         }
  115.         
  116.         if ($script eq 'config' || $is_confmodule) {
  117.             my $confmodule=make_confmodule(
  118.                 "$infodir/$pkg.$script", @$info);
  119.     
  120.             $confmodule->owner($pkg);
  121.         
  122.             1 while ($confmodule->communicate);
  123.     
  124.             exit $confmodule->exitcode if $confmodule->exitcode > 0;
  125.         }
  126.         else {
  127.             Debconf::Db->save;
  128.             
  129.             delete $ENV{DEBIAN_HAS_FRONTEND};
  130.             my $ret=system("$infodir/$pkg.$script", @$info);
  131.             if (int($ret / 256) != 0) {
  132.                 exit int($ret / 256);
  133.             }
  134.             $ENV{DEBIAN_HAS_FRONTEND}=1;
  135.             
  136.             Debconf::Db->load;
  137.         }
  138.     }
  139. }
  140.  
  141. $frontend->shutdown;
  142.  
  143. Debconf::Db->save;
  144.  
  145. sub allpackages {
  146.     my @ret;
  147.     local $/="\n\n";
  148.     
  149.     open (STATUS, "</var/lib/dpkg/status")
  150.         || die sprintf(gettext("Cannot read status file: %s"), $!);
  151.     while (<STATUS>) {
  152.         push @ret, $1
  153.             if m/Status:\s*.*\sinstalled\n/ && m/Package:\s*(.*)\n/;
  154.     }
  155.     close STATUS;
  156.  
  157.     return sort @ret;
  158. }
  159.  
  160.